#include<bits/stdc++.h>
#define int long long
#define N 85
using namespace std;
int n,m;
int c[N],t[N],w[N];
int len,sum;
int ans,cnt;
int f[10005];
struct node{
    int a,b;
}g[N*N];
void dfs(int x,int k,int res){
    ans=max(ans,res);
    if(x>n||!k) return;
    for(int i=0;i<=c[x]&&i*t[x]<=k;i++) dfs(x+1,k-i*t[x],res+i*w[x]);
}
void sub(){
    for(int i=1;i<=len;i++){
        for(int j=m;j>=g[i].b;j--){
            f[j]=max(f[j],f[j-g[i].b]+g[i].a);
        }
    }
    printf("%lld\n",f[m]);
}
bool cmp(node x,node y){
    if(x.a*y.b!=y.a*x.b) return x.a*y.b>y.a*x.b;
    return x.b>y.b;
}
void DFS(int x,int k,int res){
    ans=max(ans,res);
    cnt++;
    if(cnt>5e7&&(double)clock()/CLOCKS_PER_SEC>0.97){
        printf("%lld",ans);
        exit(0);
    }
    if(x>len||!k) return;
    if(g[x].b<=k) DFS(x+1,k-g[x].b,res+g[x].a);
    DFS(x+1,k,res);
}
signed main(){
    freopen("book.in","r",stdin);
    freopen("book.out","w",stdout);
    scanf("%lld",&n);
    for(int i=1;i<=n;i++) scanf("%lld",&c[i]);
    for(int i=1;i<=n;i++) scanf("%lld",&t[i]);
    for(int i=1;i<=n;i++) scanf("%lld",&w[i]);
    scanf("%lld",&m);
    for(int i=1;i<=n;i++) c[i]=min(c[i],m/t[i]),sum+=c[i];
    if(sum<=20){
        dfs(1,m,0);
        printf("%lld",ans);
        return 0;
    }
    for(int i=1;i<=n;i++){
        int s=1,p=c[i];
        while(s<=p){
            g[++len]={w[i]*s,t[i]*s};
            p-=s;s*=2;
        }
        if(p) g[++len]={w[i]*p,t[i]*p};
    }
    if(m<=10000){sub();return 0;}
    sort(g+1,g+len+1,cmp);
    DFS(1,m,0);
    printf("%lld",ans);
    return 0;
}